/**
 * @file "vecteur.h"
 * @brief defininition des procédures et déclarations des fonctions permettant de faire des operations et de manipuler les vecteurs
*/
#include <math.h>
#ifndef _VECTEUR_H
#define _VECTEUR_H
/**
 * @brief strucuture vecteur
 * @details un vecteur est defini par deut float x, et y
*/
typedef struct {
    float  x ,y;
} Vect;

/**
 * @brief procédure qui alloue en mémoire (dynamiquement) un vecteur
 * @param[in-out] Vect *
 * @return Vect *
 * @warning les coordonées x et y ne sont pas initialisées
 * @warning ne pas oublier d'utilisé vectDetruire() pour chaque pointeur crée

*/
Vect *vectNouveau();

/**
 * @brief procédure qui initialise un vecteur avec x et y, et l'alloue dynamiquement en mémoire (appel à vectNouveau
 * @param[in] float x
 * @param[in] float y
 * @param[in-out] Vect *
 * @return none
*/
Vect *vectNouveauInit(float ,float );

/**
 * @brief détruis un vecteur
 * @details la mémoire alloué pour le vecteur passé en paramètre sera liberé.
 * @param[in-out] Vect pV
 * @return none
 * @warning utilisé uniquement sur un vecteur initialisé à x et y, ou crée avec vectNouveau(), ou vectNouveauInit(float , float)
*/
void vectDetruire(Vect *);


/**
 * @brief retourne la norme d'un vecteur
 * @param[in] const Vect*
 * @return float
 */
float vectGetNorme(const Vect *);

/**
 * @brief initialise,en allouant dynamiquement, le vecteur somme des deux vecteurs passés en paramètres.
 * @param[in-out] Vect *
 * @param[in] Vect *
 * @param[in] Vect *
 * @return Vect*
*/
Vect *vectAddition( const Vect * , const Vect *);

/**
 * @brief accesseur, pour la variable X d'un vecteur(Vect)
 * @paran[in] const Vect*
 * @return float
*/

float vectGetX(const Vect *);

/**
 * @brief accesseur, pour la variable y d'un vecteur(Vect)
 * @paran[in] const Vect*
 * @return float
*/
float vectGetY(const Vect *pVect);

/**
 * @brief mutateur, pour la variable x d'un vecteur(Vect)
 * @paran[in-out] Vect*
 * @paran[in] float
 * @return none
*/
void vectSetX(Vect *, float );

/**
 * @brief mutateur, pour la variable y d'un vecteur(Vect)
 * @paran[in-out]  Vect*
 * @paran[in] float
 * @return none
*/
void vectSetY(Vect *, float);


/**
 * @brief mutateur, pour les variables x et y d'un vecteur(Vect)
 * @paran[in-out] Vect*
 * @paran[in] float
 * @paran[in] float
 * @return none
*/
void vectSetXY(Vect *, float , float);


/**
 * @brief Test de regression du moule vect
 *
*/
void vectTestRegression();

#endif
